package com.zenithmind.task.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.task.pojo.entity.TaskLog;
import com.zenithmind.task.pojo.query.TaskLogQuery;
import com.zenithmind.task.pojo.vo.TaskLogVO;

import java.util.List;

/**
 * 任务日志服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface TaskLogService extends IService<TaskLog> {

    /**
     * 分页查询任务日志列表
     *
     * @param query 查询条件
     * @param userId 当前用户ID
     * @return 分页结果
     */
    PageResult<TaskLogVO> getTaskLogPage(TaskLogQuery query, String userId);

    /**
     * 根据ID查询任务日志详情
     * 
     * @param id 日志ID
     * @param userId 当前用户ID
     * @return 日志详情
     */
    TaskLogVO getTaskLogById(String id, String userId);

    /**
     * 创建任务日志
     * 
     * @param taskLog 日志信息
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTaskLog(TaskLog taskLog, String userId);

    /**
     * 删除任务日志
     * 
     * @param id 日志ID
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean deleteTaskLog(String id, String userId);

    /**
     * 批量删除任务日志
     * 
     * @param ids 日志ID列表
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean batchDeleteTaskLogs(List<String> ids, String userId);

    /**
     * 查询任务的日志列表
     * 
     * @param taskId 任务ID
     * @param userId 当前用户ID
     * @return 日志列表
     */
    List<TaskLogVO> getTaskLogs(String taskId, String userId);

    /**
     * 记录任务状态变更日志
     * 
     * @param taskId 任务ID
     * @param oldStatus 旧状态
     * @param newStatus 新状态
     * @param userId 操作者ID
     * @param remark 备注
     * @return 记录结果
     */
    Boolean logStatusChange(String taskId, Integer oldStatus, Integer newStatus, String userId, String remark);

    /**
     * 记录任务分配日志
     * 
     * @param taskId 任务ID
     * @param assigneeId 被分配人ID
     * @param assigneeName 被分配人姓名
     * @param userId 操作者ID
     * @param remark 备注
     * @return 记录结果
     */
    Boolean logAssignment(String taskId, String assigneeId, String assigneeName, String userId, String remark);

    /**
     * 记录任务进度更新日志
     * 
     * @param taskId 任务ID
     * @param oldProgress 旧进度
     * @param newProgress 新进度
     * @param userId 操作者ID
     * @param remark 备注
     * @return 记录结果
     */
    Boolean logProgressUpdate(String taskId, Integer oldProgress, Integer newProgress, String userId, String remark);

    /**
     * 记录工时日志
     * 
     * @param taskId 任务ID
     * @param hours 工时
     * @param description 工作描述
     * @param userId 操作者ID
     * @return 记录结果
     */
    Boolean logWorkHours(String taskId, Double hours, String description, String userId);

    /**
     * 查询用户的操作日志
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 操作日志列表
     */
    PageResult<TaskLogVO> getUserOperationLogs(String userId, Integer pageNum, Integer pageSize);
}
